/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.model;

import com.caracol.db.AccesoDatos;
import com.caracol.db.CaracolQueryGenerator;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 *
 * @author Roque Rueda
 */
public class OficialEscolaridad {
    
    private int idOficial;
    private int idEscolaridad;
    
    private static final String ID_OFICIAL = "id_oficial";
    private static final String ID_ESCOLARIDAD = "id_escolaridad";
    private static final String TABLE = "rel_oficial_escolaridad";
    
    private static CaracolQueryGenerator caracolQuery = new CaracolQueryGenerator();

    public OficialEscolaridad(int idOficial, int idEscolaridad) {
        this.idOficial = idOficial;
        this.idEscolaridad = idEscolaridad;
    }

    public OficialEscolaridad() {
    }
    
    /**
     * Get all the cargos that exist in the database
     * @return {}
     * @throws SQLException
     * @throws Exception 
     */
    public static List<OficialEscolaridad> getAllByOficial(int idOficial) throws SQLException, Exception {
        ArrayList<OficialEscolaridad> oficialEscolaridades = new ArrayList<OficialEscolaridad>();
        String[] columns = new String[] { ID_OFICIAL, ID_ESCOLARIDAD };
        Map<String, String> where = new LinkedHashMap<String, String>();
        where.put(ID_OFICIAL, new Integer(idOficial).toString());
        
        List<Object> rawCargo = caracolQuery.query(columns, TABLE, where, null, null, null, null);
        
        for (Object object : rawCargo) {
            List<Object> row = (List<Object>) object;
            OficialEscolaridad oficialEscolaridad = new OficialEscolaridad();
            oficialEscolaridad.setIdOficial(Integer.parseInt(row.get(0).toString()));
            oficialEscolaridad.setIdEscolaridad(Integer.parseInt(row.get(0).toString()));    
            oficialEscolaridades.add(oficialEscolaridad);
        }
        
        return oficialEscolaridades;
    }
    
    /**
     * Get all the cargos that exist in the database
     * @return {}
     * @throws SQLException
     * @throws Exception 
     */
    public static List<OficialEscolaridad> getAllByEscolaridad(int idEscolaridad) throws SQLException, Exception {
        ArrayList<OficialEscolaridad> oficialEscolaridades = new ArrayList<OficialEscolaridad>();
        String[] columns = new String[] { ID_OFICIAL, ID_ESCOLARIDAD };
        Map<String, String> where = new LinkedHashMap<String, String>();
        where.put(ID_ESCOLARIDAD, new Integer(idEscolaridad).toString());
        
        List<Object> rawCargo = caracolQuery.query(columns, TABLE, where, null, null, null, null);
        
        for (Object object : rawCargo) {
            List<Object> row = (List<Object>) object;
            OficialEscolaridad oficialEscolaridad = new OficialEscolaridad();
            oficialEscolaridad.setIdOficial(Integer.parseInt(row.get(0).toString()));
            oficialEscolaridad.setIdEscolaridad(Integer.parseInt(row.get(0).toString()));    
            oficialEscolaridades.add(oficialEscolaridad);
        }
        
        return oficialEscolaridades;
    }
    
    /** 
     * Saves the values of this instance in the database
     * @return true if the operation affects more than 0 rows
     * @throws SQLException if some exception related with the database happend during the excetion 
     * of this operation
     * @throws Exception if some exception happend during the operation
     */
    public boolean save() throws SQLException, Exception {
        if (getIdOficial() > 0 && getIdEscolaridad() > 0 ) { // this is already save
            return true;
        }
        Map<String,Object> m = new LinkedHashMap<String,Object>();
        m.put(ID_OFICIAL, getIdOficial());
        m.put(ID_ESCOLARIDAD, getIdEscolaridad());
        
        int rowsAffected = caracolQuery.insert(TABLE, m);
       
        return rowsAffected > 0;
    }
    
    /** 
     * Delete the cargo from database this delete is made by searching in the database if this instance id exist
     * 
     * @return true if the operation affect more thant one row otherwise returns false
     * @throws SQLException if the database throws an exception during the execution of this operation
     * @throws Exception if something other than the database throws an exception this is throw
     * 
     */
    public boolean delete() throws SQLException, Exception {
        if (getIdOficial() <= 0 && getIdEscolaridad() <= 0) {
            return true;
        }

        Map<String, Object> conditions = new LinkedHashMap<String, Object>();
        conditions.put(ID_OFICIAL, getIdOficial());
        conditions.put(ID_ESCOLARIDAD, getIdEscolaridad());
        int rowsAffected = caracolQuery.delete(TABLE, conditions);

        return rowsAffected > 0;
    }

    /**
     * @return the idOficial
     */
    public int getIdOficial() {
        return idOficial;
    }

    /**
     * @param idOficial the idOficial to set
     */
    public void setIdOficial(int idOficial) {
        this.idOficial = idOficial;
    }

    /**
     * @return the idEscolaridad
     */
    public int getIdEscolaridad() {
        return idEscolaridad;
    }

    /**
     * @param idEscolaridad the idEscolaridad to set
     */
    public void setIdEscolaridad(int idEscolaridad) {
        this.idEscolaridad = idEscolaridad;
    }
    
}
